package com.tedu.bill;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * Author：毕龙
 * Date: 2024/3/31 14:05
 */
public class TestArrayCURD {

    //声明一个变量作为数组的有效元素
    static int index;
    //声明一个空数组
    static String[] arr = {};

    public static void main(String[] args) {
        //给数组添加元素
        add("林嘉伟");
        add("汪平安");
        add("陈凯");
        add("何子荣");
        print(arr);
        add("海滨", 1);
        print(arr);
        add("张博", 0);
        print(arr);
        add("丝毫", 0);
        print(arr);
        add("齐超", 0);
        print(arr);
        add("小花", 0);
        add("泽豪", 0);
        add("王伟", 0);
        print(arr);
        delete(9);
        print(arr);
        delete(2);
        print(arr);

        delete("张博");
        print(arr);
        update("qichao", 2);
        print(arr);
        System.out.println(get(2));

    }


    /**
     * 给数组添加元素
     * 在数组的末尾添加元素
     */
    public static void add(String element) {
        //如果没有有效元素开辟空间
        initCreate();
        // 数组扩容
        expand();
        //表示元素添加成功
        arr[index] = element;
        //有效元素是不是加1
        index++;
    }

    /**
     * 指定数组的位置添加元素
     *
     * @param element  添加的元素
     * @param position 添加元素的位置
     */
    public static void add(String element, int position) {

        //数组扩容
        expand();
        //判断位置是否大于有效数字的位置
        if (position >= index) {
            //添加到末尾
            add(element);
        } else {
            for (int i = index; i > position; i--) {
                //将所有的元素向后移动一位
                arr[i] = arr[i - 1];
            }
            //将元素添加到position位置
            arr[position] = element;
            //有效位数加1
            index++;
        }

    }

    /**
     * 数组扩容
     */
    public static void expand() {
        //判断数组的有效数字是否满了
        if (index >= arr.length) {
            //对数组进行扩容
            arr = Arrays.copyOf(arr, arr.length * 2);
        }
    }

    /**
     * 数组初始空间创建
     */
    public static void initCreate() {
        //如果数组的默认大小为0 给数组分配一个空间为5的大小
        if (arr.length == 0) {
            arr = new String[5];
        }
    }

    /**
     * 数组元素遍历
     */
    public static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }


    /**
     * 删除数组中的元素
     */
    public static void delete() {
        if (index == 0) {
            System.out.println("还没有添加元素");
            //函数后面的代码不执行
            return;
        }
        //让末尾的元素为null值
        arr[index - 1] = null;
        index--;
        reduce();
    }

    /**
     * 数组缩容
     */
    public static void reduce() {
        //数组是否缩容
        if (index <= arr.length / 2) {
            arr = Arrays.copyOf(arr, arr.length / 2);
        }
    }

    /**
     * 删除指定的位置元素
     */
    public static void delete(int position) {
        //判断该位置的元素是否存在
        if (position >= index) {
            System.out.println("该位置还没有元素");
            return;
        }
        //如果position 等于index-1
        if (position == index - 1) {
            delete();
            return;
        }

        //将position位置的元素覆盖
        //将最后的一个为null
        //有效位数减1
        for (int i = position; i < index - 1; i++) {
            arr[i] = arr[i + 1];
        }
        arr[index - 1] = null;
        index--;
        reduce();
    }

    /**
     * 删除指定的元素
     */
    public static void delete(String element) {

        if (contain(element)) {
            for (int i = 0; i < index; i++) {
                if (arr[i].equals(element)) {
                    delete(i);
                    i--;
                }
            }
        }
        System.out.println("数组中没有该元素");
    }

    /**
     * 判断元素是否在数组中
     */
    public static boolean contain(String element) {
        for (int i = 0; i < index; i++) {
            if (arr[i].equals(element)) {
                //数组中含有该元素
                return true;
            }
        }
        //数组中没有该元素
        return false;
    }

    /**
     * 修改数组中的元素
     */
    public static void update(String element,int position){
        if(position >= index){
            System.out.println("修改元素失败");
            return;
        }
        arr[position] = element;
    }

    /**
     * 获取指定位置的元素
     */
    public static String get(int position){
        if(position >= index){
            System.out.println("获取元素失败");
            return null;
        }
        return arr[position];
    }

}
